// PLC通过队列读取和写入变量测试脚本
const plcService = require('../client/src/services/plcService');

async function testPLCQueueReadWrite() {
  console.log('开始测试PLC通过队列读取和写入变量功能...');
  
  try {
    // 首先加载PLC配置
    console.log('\n1. 加载PLC配置:');
    const config = await plcService.loadConfig();
    console.log('PLC配置加载成功:', JSON.stringify(config, null, 2));
    
    // 获取配置中的变量地址
    let variablesToTest = [];
    if (config.variables && config.variables.length > 0) {
      variablesToTest = config.variables.slice(0, 3).map(v => v.address); // 取前3个变量
      console.log('\n2. 从配置中获取变量地址:', variablesToTest);
    } else {
      // 如果配置中没有变量，使用默认变量
      variablesToTest = ['DB1,W0.0', 'DB1,W2.0', 'DB1,W4.0'];
      console.log('\n2. 使用默认变量地址:', variablesToTest);
    }
    
    // 通过队列服务读取变量
    console.log('\n3. 通过队列服务读取变量:');
    const readResult = await plcService.readVariables(variablesToTest, true); // true表示使用队列服务
    console.log('读取结果:', JSON.stringify(readResult, null, 2));
    
    // 通过队列服务写入变量
    console.log('\n4. 通过队列服务写入变量:');
    for (let i = 0; i < variablesToTest.length; i++) {
      const variable = variablesToTest[i];
      const value = Math.floor(Math.random() * 1000); // 随机值
      
      console.log(`  写入 ${variable} = ${value}`);
      const writeResult = await plcService.writeVariable(variable, value);
      console.log(`  写入结果:`, writeResult);
    }
    
    // 再次通过队列服务读取变量，验证写入是否成功
    console.log('\n5. 再次通过队列服务读取变量，验证写入是否成功:');
    const readResultAfterWrite = await plcService.readVariables(variablesToTest, true);
    console.log('写入后读取结果:', JSON.stringify(readResultAfterWrite, null, 2));
    
    console.log('\n✅ 所有队列读取和写入测试完成!');
  } catch (error) {
    console.error('❌ 测试过程中出现错误:', error);
  }
}

// 运行测试
testPLCQueueReadWrite();